#ifndef CALCULATEURREUSSITE_HPP
#define CALCULATEURREUSSITE_HPP

#include <functional>

#include <QtCore/QHash>
#include <QtCore/QList>
#include <QtCore/QMultiMap>

#include "XmlInfo/XmlInfoCaracteristiques.hpp"
#include "Utils/BiClef.hpp"

class XmlInfoContrat;
class XmlInfoMonstre;

/** Classe qui calcule le pourcentage de réussite d'un monstre pour un contrat.
  * La classe calcule le pourcentage d'adéquation pour chaque caractéristique,
  * puis renvoie le total. Elle hérite de std::binary_function pour pouvoir
  * être utilisée dans les boucles STL.
  *
  * @author Johan "Solo" Luisier
  * @date Mai 2012
  */
class CalculateurReussite : public std::binary_function< XmlInfoContrat&,
        XmlInfoMonstre&,
        unsigned >
{
public:
    CalculateurReussite();
    ~CalculateurReussite();
    unsigned operator()( const XmlInfoContrat& contrat,
                         const XmlInfoMonstre& monstre );
    unsigned operator()( const XmlInfoContrat& contrat,
                         const XmlInfoMonstre& monstre,
                         QHash< EnumCaracteristique, unsigned >& Resultat );
protected:
    /** Effectue le calcul proprement dit des probabilités pour chaque caractéristique.
      *
      * @param[in] contrat informations sur le contrat à effectuer.
      * @param[in] monstre informations sur le monstre.
      * @param[out] resultat chances de réussite pour chaque caractéristiques.
      *
      * @return le pourcentage final de réussite du contrat.
      */
    unsigned calculeElementaire( QHash< EnumCaracteristique, unsigned >& resultat ) const;
};

#endif // CALCULATEURREUSSITE_HPP
